A typical computer system consists of several basic components and/or resources, including a processor, volatile and non-volatile memory, and various peripheral devices, including graphics controller(s), mass storage devices, and input/output devices. A chipset connects these computer system components together, and manages the flow of information between them. Known protocols may be used by the computer system for communications among system components.
Moreover, a processor in a computer system may include a plurality of different units such as instruction fetch unit, decode unit, execute unit, memory unit, retirement unit, etc. These units may include an instruction pipeline that processes instructions. These units may contain resources that are allocated for processing threads associated with one or more applications or other program(s) being processed by the system. As a computer system processes the one or more applications, processes or threads associated with these applications may compete for limited resources.
In a multi-threaded micro-architecture processor, these limited resources may be used by multiple threads, or logical processors with hardware support. In a typical processor, some resources may be partitioned so the threads have equal shares while others are fully shared. Inefficiencies may arise when resources are statically partitioned or allocated. For example, if resources are divided equally among threads (e.g. divided in half between two resources), then one thread may optimally utilize its half of the resources while the other thread only partially utilizes its half. This may occur if one thread does not need that particular resource as much as the other does and so its allocation of the resource is wasted while the other thread could use it. If a computer system is not fully using all its resources it may deliver lower overall system performance.
For example, a word processor running on a computer system may compete for resources with a CD (compact disc) player processing audio files on the same system. In this example, the re-order buffer resources may be equally allocated to threads associated with each of these applications. While the word processor application may utilize its cache resources to their maximum extent, the audio application may not need all of the caching resources and under-utilizes these resources. Although the audio application will require sufficient resources so that the application offers good sound quality, some resources allocated for threads associated with the audio application may be wasted.
When resources are fully shared among threads, fairness issues can arise resulting in similar inefficiencies. One thread that allocates the resource faster but not necessarily for the execution of useful micro-ops can take over most of the resource, in expense of the other thread(s) that may be doing more useful tasks.